Imports JS.Nativo.DTO.Contable
Imports JS.Nativo.WinFormUI.Contable

Namespace Controles

    Public Class Cuenta

        <System.ComponentModel.Category("Apariencia")> _
        Public Property Texto() As String
            Get
                Return gpbCuenta.Text
            End Get
            Set(ByVal value As String)
                gpbCuenta.Text = value
            End Set
        End Property

        Private mCuenta As CuentaDTO
        Public Property Cuenta() As CuentaDTO
            Get
                Return mCuenta
            End Get
            Set(ByVal value As CuentaDTO)
                mCuenta = value
                If mCuenta IsNot Nothing Then
                    txtCuenta.Text = mCuenta.Nombre
                    ntxOrdenCuenta.Value = mCuenta.Orden
                Else
                    txtCuenta.Text = String.Empty
                    ntxOrdenCuenta.Text = String.Empty
                End If
            End Set
        End Property

        Private mRubro As RubroDTO
        Public Property Rubro() As RubroDTO
            Get
                Return mRubro
            End Get
            Set(ByVal value As RubroDTO)
                mRubro = value
                If mRubro IsNot Nothing Then
                    txtRubro.Text = mRubro.Nombre
                    ntxOrdenRubro.Value = mRubro.Orden
                Else
                    txtRubro.Text = String.Empty
                    ntxOrdenRubro.Text = String.Empty
                End If
            End Set
        End Property

        Private mGrupo As GrupoDTO
        Public Property Grupo() As GrupoDTO
            Get
                Return mGrupo
            End Get
            Set(ByVal value As GrupoDTO)
                mGrupo = value
                If mGrupo IsNot Nothing Then
                    txtGrupo.Text = mGrupo.Nombre
                    ntxOrdenGrupo.Value = mGrupo.Orden
                Else
                    txtGrupo.Text = String.Empty
                    ntxOrdenGrupo.Text = String.Empty
                End If
            End Set
        End Property

        <System.ComponentModel.DefaultValue(-1)> _
        Public Property IdCuenta() As Integer
            Get
                If Me.Cuenta IsNot Nothing Then
                    Return Me.Cuenta.IdCuenta
                Else
                    Return -1
                End If
            End Get
            Set(ByVal value As Integer)
                If value > 0 AndAlso (Me.Cuenta Is Nothing OrElse (Me.Cuenta IsNot Nothing AndAlso value <> Me.Cuenta.IdCuenta)) Then
                    Me.Cuenta = Nothing
                    Me.Rubro = Nothing
                    Me.Grupo = Nothing
                    Dim cuentaEx As CuentaExtendidaDTO = Agente.Contable.ObtenerCuentaExtendida(value)
                    If cuentaEx IsNot Nothing Then
                        Me.Cuenta = cuentaEx.Cuenta
                        Me.Rubro = cuentaEx.Rubro
                        Me.Grupo = cuentaEx.Grupo
                    Else
                        Me.Cuenta = Nothing
                        Me.Rubro = Nothing
                        Me.Grupo = Nothing
                    End If
                ElseIf value <= 0 Then
                    Me.Cuenta = Nothing
                    Me.Rubro = Nothing
                    Me.Grupo = Nothing
                End If
            End Set
        End Property

        Private Sub butBuscar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles butBuscar.Click
            Try
                Dim cuenta As New frmBuscarCuenta
                cuenta.Size = New Size(750, 500)
                cuenta.Grupos = Agente.Contable.ObtenerGrupos()
                cuenta.Rubros = Agente.Contable.ObtenerRubros()
                cuenta.Cuentas = Agente.Contable.ObtenerCuentas()
                cuenta.Cuenta = Me.Cuenta
                If cuenta.ShowDialog() = DialogResult.OK Then
                    Me.Grupo = cuenta.Grupo
                    Me.Rubro = cuenta.Rubro
                    Me.Cuenta = cuenta.Cuenta
                End If
            Catch ex As Exception
                MostrarErrorGrave(ex.Message)
            End Try
        End Sub

        Private Sub ntxOrdenGrupo_Leave(ByVal sender As Object, ByVal e As System.EventArgs) Handles ntxOrdenGrupo.Leave
            MostrarCuenta()
        End Sub

        Private Sub ntxOrdenRubro_Leave(ByVal sender As Object, ByVal e As System.EventArgs) Handles ntxOrdenRubro.Leave
            MostrarCuenta()
        End Sub

        Private Sub ntxOrdenCuenta_Leave(ByVal sender As Object, ByVal e As System.EventArgs) Handles ntxOrdenCuenta.Leave
            MostrarCuenta()
        End Sub

        Private Sub MostrarCuenta()
            If ntxOrdenGrupo.Value > 0 AndAlso ntxOrdenRubro.Value > 0 AndAlso ntxOrdenCuenta.Value > 0 _
                AndAlso (Me.Cuenta Is Nothing OrElse (Me.Grupo IsNot Nothing AndAlso Me.Rubro IsNot Nothing AndAlso Me.Cuenta IsNot Nothing _
                AndAlso (Me.Grupo.Orden <> ntxOrdenGrupo.Value OrElse Me.Rubro.Orden <> ntxOrdenRubro.Value OrElse Me.Cuenta.Orden <> ntxOrdenCuenta.Value))) Then
                Dim cuentaEx As CuentaExtendidaDTO
                Try
                    cuentaEx = Agente.Contable.ObtenerCuentaPorOrdenes(ntxOrdenGrupo.Value, ntxOrdenRubro.Value, ntxOrdenCuenta.Value)
                Catch ex As Exception
                    MostrarErrorGrave(ex.Message)
                End Try
                If cuentaEx IsNot Nothing Then
                    Me.Cuenta = cuentaEx.Cuenta
                    Me.Rubro = cuentaEx.Rubro
                    Me.Grupo = cuentaEx.Grupo
                Else
                    Me.Cuenta = Nothing
                    Me.Rubro = Nothing
                    Me.Grupo = Nothing
                End If
            End If

        End Sub

    End Class

End Namespace
